home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 015 / 2sides.arc / TWOSIDED.C < prev    next >
Text File  |  1986-03-03  |  4KB  |  154 lines

  1. /* 0:18:24  3/2/1986 */
  2.  
  3. #include <stdio.h>
  4.  
  5. FILE *fi, *fo;
  6. int lc, pagelen, p;
  7.  
  8. #define FF '\014'
  9.  
  10. main(argc, argv)
  11. int argc;
  12. char *argv[];
  13. {
  14.     int c;
  15.     extern int p;
  16.     char s[80], *spt;
  17.  
  18.     if(argc == 1)
  19.     {
  20.        printf("Usage:  TWOSIDED filname.ext\n");
  21.        return;
  22.     }
  23.     else if((fi = fopen(argv[1], "r")) == NULL)
  24.     {
  25.            printf("Cannot find %s!\n", argv[1]);
  26.            return;
  27.     }
  28.     else
  29.     {
  30.         fo = fopen("LPT1:","w");
  31.         printf("Two sided printing utility.\n\n");
  32.         printf("Written by Louis-Carl Lalonde.\n\n");
  33.         printf("This utility will help you print you documents on both side of the\n");
  34.         printf("page.  It will first print all the odd numbered pages, then after\n");
  35.         printf("you have reversed the paper, the even numbere ones.\n\n");
  36.         printf("Do you want page numbers to be printed (Y/N) (default Y) ");
  37.         p = getch();
  38.         putch(p);
  39.         if (p > 96)
  40.            p -= 32;       /* change to uppercase */
  41.         printf("\n\nPlease enter maximum number of lines (default 55): ");
  42.         gets(s);
  43.         stcd_i(s, &c);
  44.         if(c <= 0)
  45.            pagelen = 55;
  46.         else
  47.            pagelen = c;
  48.         spt = (p != 'N') ? "Yes" : "No";
  49.         printf("\n\nPage numbers:   %s", spt);
  50.         printf("\nLines per page: %3d", pagelen);
  51.         if (p != 'n' && p != 'N')
  52.            pagelen -= 3;
  53.         printf("\n\nPlease lign up your printer and hit any key to continue.\n");
  54.         printf("CTRL-C or CTRL-BREAK will abort.\n");
  55.         getch();
  56.  
  57.         printpag(1);
  58.         fclose(fo);
  59.         printf("\n\007Now finished with odd numbered pages.\n");
  60.  
  61.         printf("Please remove paper and reinsert on reverse side.\n");
  62.         printf("Hit any key to continue.  CTRL-C (CTRL-BREAK) will abbort\n");
  63.         getch();
  64.         fo = fopen("LPT1:","w");
  65.         printpag(0);
  66.         fprintf(fo, "\033@");
  67.         fclose(fo);
  68.         fclose(fi);
  69.         return;
  70.     }
  71. }
  72.  
  73. printpag(s)
  74. int s;
  75. {
  76.    extern int lc;
  77.    int line, page;
  78.  
  79.    rewind(fi);
  80.    lc = 0;
  81.  
  82.    if( s == 1)             /* odd pages */
  83.    {
  84.       page = 1;            /* page counter reset */
  85.       while(wp(page++) != NULL)
  86.       {
  87.          if( sp() == NULL )  /* NULL if eof */
  88.              break;
  89.          page++;        /* skip two page numbers */
  90.       }
  91.    }
  92.    else         /* even pages, second pass */
  93.    {
  94.       page = 2;
  95.       while(sp() != NULL)
  96.       {
  97.          if(wp(page++) == NULL)
  98.             break;
  99.          page++;
  100.       }
  101.    }
  102. }
  103.  
  104. wp(page)
  105. int page;   /* page number */
  106. {
  107.    int c, line;
  108.    extern int lc, p;
  109.  
  110.    if (p != 'N')
  111.       fprintf(fo, "%37s%3d -\n\n\n", "-", page);
  112.  
  113.    for ( line = 0; line < pagelen; line++)
  114.    {
  115.       while( (c = fgetc(fi)) != '\n' && c != FF && c != EOF)
  116.          fputc(c, fo);
  117.       if(c == EOF)
  118.       {
  119.          fputc(FF, fo);
  120.          return(NULL);
  121.       }
  122.       fputc(c, fo);
  123.       lc++;
  124.       if (c == FF)
  125.          return(lc);
  126.    }
  127.    fputc(FF, fo);
  128.    while((c = fgetc(fi)) == '\n')   /* skip empty lines */
  129.       lc++;
  130.    ungetc(c, fi);
  131.    return(lc);
  132. }
  133.  
  134. sp()           /* skip page function */
  135. {
  136.    int line, c;
  137.    extern int lc;
  138.  
  139.    for ( line = 0; line < pagelen; line++)
  140.    {
  141.       while( (c = fgetc(fi)) != '\n' && c != FF && c != EOF)
  142.          ;
  143.       if(c == EOF)
  144.          return(NULL);
  145.       lc++;
  146.       if (c == FF)
  147.          return(lc);
  148.    }
  149.    while((c = fgetc(fi)) == '\n')   /* skip empty lines */
  150.       lc++;
  151.    ungetc(c, fi);
  152.    return(lc);
  153. }
  154.